<?php
namespace App\Services;

use App\Models\Course;
use App\Traits\PageTrait ;

class CourseService
{
    use PageTrait;

    /**
     * 获取首页统计信息
     * 
     * 本函数用于获取并返回与课程相关的统计信息，包括视频数量、直播数量和录播数量
     * 这些数据将展示在首页或者管理员的仪表板上，以帮助用户或管理员快速了解课程的总体情况
     * 
     * @return array 包含视频数量、直播数量和录播数量的关联数组
     */
    public function homeCount() {
        // 返回包含视频数量、直播数量和录播数量的关联数组
        return [
            // 视频数量，通过状态和类型筛选出视频课程
            'video_num' => Course::where('status', 0)->where('type', 1)->count(),
            // 直播数量，通过状态、类型和直播状态筛选出未结束的直播课程
            'live_num' => Course::where('status', 0)->where('type', 2)->where('live_status', '<', 2)->count(),
            // 录播数量，通过状态、类型和直播状态筛选出已结束的直播课程，即录播课程
            'record_num' => Course::where('status', 0)->where('type', 2)->where('live_status', 2)->count(),
        ];
    }

    public function dashboard ()
    {
        return [
            'total_num' => Course::where('status', 0)->count(),
            'week_add_num' => Course::where('status', 0)->where('created_at', '>', date('Y-m-d', strtotime('this week')))->count(),
            'views_num' => Course::where('status', 0)->sum('views'),
        ];
    }

    /**
     * 获取课程列表
     * @param array $condition 条件
     * @param string $sort 排序
     */ 
    public function getList($condition, $sort = 'sort', $sortable = 'desc')
    {
    
        $query = Course::query()->with(['subject']);
        $query->select(
            'id',
            'name',
            'type',
            'thumb',
            'is_recommend',
            'sort',
            'live_status',
            'likes',
            'views',
            'collects',
            'created_at',
            'start_time',
        );
        //搜索
        if(isset($condition['name'])) {
            $query->where('name', 'like', '%'.$condition['name'].'%');
        }
        //学科
        if(isset($condition['subject_id'])) {
            $query->where('subject_id', $condition['subject_id']);
        }
        //类型
        if(isset($condition['type'])) {
            $query->where('type', $condition['type']);
        }
        //直播状态
        if(isset($condition['live_status'])) {
            $query->where('live_status', $condition['live_status']);
        }
        
        $query->where('status', 0);
        //排序
        $query->orderBy($sort, $sortable);
        return self::JsonPage($query);
    }
    /**
     * 获取推荐课程
     * @param int $type 1:视频 2:直播
     */
    public function getRecommend($type = 1, $limit)
    {
        return Course::query()->where('type', $type)->select('id', 'name', 'thumb', 'type', 'teacher', 'views', 'likes', 'collects')->where('status', 0)->where('is_recommend', 1)->limit($limit)->get();
    }
    /**
     * 获取课程详情
     */
    public function getDetail($id)
    {
        return Course::query()->with(['lesson'])->where('id', $id)->firstOrFail();
    }
}